<!DOCTYPE html>
<html lang="zh_cn">
<head>
          <title>来玩魔王的咚</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta charset="utf-8" />
        <!-- twitter card metadata -->
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="/images/mowang.png">
<meta name="twitter:site" content="">
<meta name="twitter:title" content="WSL使用">
<meta name="twitter:description" content="<p>WSL Ubuntu系统安装：系统初始化，移动应用目录，重装Ubuntu，用find查找文件排除指定目录；Windows Terminal：修改默认程序，默认进入家目录，使用SSH；Windows的文件资源管理器访问wsl文件夹</p>">
        <!-- OG Tags -->
<meta property="og:url" content="/wsl-how-to-basic.html"/>
<meta property="og:title" content="来玩魔王的咚 | WSL使用" />
<meta property="og:description" content="<p>WSL Ubuntu系统安装：系统初始化，移动应用目录，重装Ubuntu，用find查找文件排除指定目录；Windows Terminal：修改默认程序，默认进入家目录，使用SSH；Windows的文件资源管理器访问wsl文件夹</p>" />
        <!-- favicon -->
        <link rel="icon" type="image/png" href="/images/mowang.png">
        <!-- moment.js for date formatting -->
        <script src="/theme/js/moment.js"></script>
        <!-- css -->
        <link rel="stylesheet" type="text/css" href="/theme/css/main.css" />
        <!-- 左边的menu，如果页面高度不够，就跟着滚动，否则文章分类显示不全 -->
        <link rel="stylesheet" type="text/css" href="/theme/css/mycss/menu.css" />
		<script>
			
                /*! grunt-grunticon Stylesheet Loader - v2.1.2 | https://github.com/filamentgroup/grunticon | (c) 2015 Scott Jehl, Filament Group, Inc. | MIT license. */
    
    (function(e){function t(t,n,r,o){"use strict";function a(){for(var e,n=0;u.length>n;n++)u[n].href&&u[n].href.indexOf(t)>-1&&(e=!0);e?i.media=r||"all":setTimeout(a)}var i=e.document.createElement("link"),l=n||e.document.getElementsByTagName("script")[0],u=e.document.styleSheets;return i.rel="stylesheet",i.href=t,i.media="only x",i.onload=o||null,l.parentNode.insertBefore(i,l),a(),i}var n=function(r,o){"use strict";if(r&&3===r.length){var a=e.navigator,i=e.Image,l=!(!document.createElementNS||!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect||!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1")||e.opera&&-1===a.userAgent.indexOf("Chrome")||-1!==a.userAgent.indexOf("Series40")),u=new i;u.onerror=function(){n.method="png",n.href=r[2],t(r[2])},u.onload=function(){var e=1===u.width&&1===u.height,a=r[e&&l?0:e?1:2];n.method=e&&l?"svg":e?"datapng":"png",n.href=a,t(a,null,null,o)},u.src="",document.documentElement.className+=" grunticon"}};n.loadCSS=t,e.grunticon=n})(this);(function(e,t){"use strict";var n=t.document,r="grunticon:",o=function(e){if(n.attachEvent?"complete"===n.readyState:"loading"!==n.readyState)e();else{var t=!1;n.addEventListener("readystatechange",function(){t||(t=!0,e())},!1)}},a=function(e){return t.document.querySelector('link[href$="'+e+'"]')},c=function(e){var t,n,o,a,c,i,u={};if(t=e.sheet,!t)return u;n=t.cssRules?t.cssRules:t.rules;for(var l=0;n.length>l;l++)o=n[l].cssText,a=r+n[l].selectorText,c=o.split(");")[0].match(/US\-ASCII\,([^"']+)/),c&&c[1]&&(i=decodeURIComponent(c[1]),u[a]=i);return u},i=function(e){var t,o,a;o="data-grunticon-embed";for(var c in e)if(a=c.slice(r.length),t=n.querySelectorAll(a+"["+o+"]"),t.length)for(var i=0;t.length>i;i++)t[i].innerHTML=e[c],t[i].style.backgroundImage="none",t[i].removeAttribute(o);return t},u=function(t){"svg"===e.method&&o(function(){i(c(a(e.href))),"function"==typeof t&&t()})};e.embedIcons=i,e.getCSS=a,e.getIcons=c,e.ready=o,e.svgLoadedCallback=u,e.embedSVG=u})(grunticon,this);
                
                grunticon(["/theme/css/icons.data.svg.css", "/theme/css/icons.data.png.css", "/theme/css/icons.fallback.css"]);
            </script>
        <noscript><link href="/theme/css/icons.fallback.css" rel="stylesheet"></noscript>
        <!-- menu toggle javascript -->
        <script type="text/javascript">
            document.addEventListener("DOMContentLoaded", initMenu);
            
            function initMenu(){
                var menu = document.getElementById("menu");
                var menulink = document.getElementById("menu-link");
                menulink.addEventListener("click", function toggleMenu(){
                        window.event.preventDefault();
                        menulink.classList.toggle('active');
                        menu.classList.toggle('active');              
                    });
            };
        </script>
        <!-- 不蒜子 -->
        <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

    <meta name="description" content="<p>WSL Ubuntu系统安装：系统初始化，移动应用目录，重装Ubuntu，用find查找文件排除指定目录；Windows Terminal：修改默认程序，默认进入家目录，使用SSH；Windows的文件资源管理器访问wsl文件夹</p>" />

    <meta name="tags" content="WSL" />
    <meta name="tags" content="ubuntu" />
  <!-- 替换部分base的样式，看文章时，要再宽一点，右边有很多空间可以撑开 -->
  <link rel="stylesheet" type="text/css" href="/theme/css/mycss/article.css" />

</head>
<body>
    <div role="banner" id="masthead">
        <header>
            <a href="/"><img src="/images/mowang.png" alt="McManus Logo"></a>
                <h1>来玩魔王的咚@骑士救兵</h1>
            <a href="#menu" id="menu-link">more stuff</a>
            <nav id="menu">
                <ul>
                        <li><a href="/tags">tags</a></li>
                            <li><a href="/category/cloud.html">Cloud</a></li>
                            <li><a href="/category/docker.html">Docker</a></li>
                            <li><a href="/category/go.html">Go</a></li>
                            <li><a href="/category/linux.html">Linux</a></li>
                            <li><a href="/category/python.html">Python</a></li>
                            <li class="active"><a href="/category/xue-xi-bi-ji.html">学习笔记</a></li>
                            <li><a href="/category/yun-wei-zi-dong-hua.html">运维自动化</a></li>
                </ul>
            </nav>
        </header>
    </div>
        <div class="page" role="main">
  <div class="article" role="article">
    <article>
        <footer>
            <a name="top"></a>
            <p>
              <time datetime=" 2020-09-24 09:30:00+08:00">
                <script>document.write(moment('2020-09-24 09:30:00+08:00').format('LL'));</script>
              </time>
              ~
              <time datetime=" 2020-09-24 09:30:00+08:00">
                <script>document.write(moment('2020-09-30 13:00:00+08:00').format('LL'));</script>
              </time>
            </p>
        </footer>
        <header>
          <h2>
            WSL使用
          </h2>
        </header>
      <div class="content">
         <div class="toc">
<ul>
<li><a href="#ubuntu">Ubuntu</a><ul>
<li><a href="#ying-yong-shang-dian">应用商店</a></li>
<li><a href="#yi-dong-ying-yong-mu-lu">移动应用目录</a></li>
<li><a href="#chu-shi-hua-an-zhuang">初始化安装</a></li>
<li><a href="#zhong-zhuang-ubuntu">重装Ubuntu</a></li>
<li><a href="#tiao-zheng-bu-fen-mu-lu">调整部分目录</a></li>
<li><a href="#zai-gen-mu-lu-zhong-cha-zhao-wen-jian-find">在根目录中查找文件(find)</a></li>
</ul>
</li>
<li><a href="#windows-terminal">Windows Terminal</a><ul>
<li><a href="#xiu-gai-mo-ren-cheng-xu">修改默认程序</a></li>
<li><a href="#mo-ren-jin-ru-jia-mu-lu">默认进入家目录</a></li>
<li><a href="#shi-yong-ssh">使用SSH</a></li>
</ul>
</li>
<li><a href="#fang-wen-wsl-wen-jian-jia">访问wsl文件夹</a></li>
</ul>
</div>
<p>Windows Subsystem for Linux（简称WSL）可以直接在Windows 10上运行原生的Linux。<br>
好处是，现在不用装双系统（早期的解决方案），不用开虚拟机（可能仍然是目前最通用的解决方案）。直接在Windows系统中就可以运行一个Linux，用起来更加方便。  </p>
<h3 id="ubuntu"><a class="toclink" href="#ubuntu">Ubuntu</a></h3>
<p>安装Ubuntu子系统，并完成一些初始的配置。  </p>
<h4 id="ying-yong-shang-dian"><a class="toclink" href="#ying-yong-shang-dian">应用商店</a></h4>
<p>打开应用商店，搜索WSL，可以搜到所有相关的应用。个人最熟悉Centos，然而并没有，我选择使用Ubuntu。<br>
一共搜到3个应用（其实就2个）：</p>
<ol>
<li>Ubuntu 18.04 LTS</li>
<li>Ubuntu 20.04 LTS</li>
<li>Ubuntu</li>
</ol>
<p>最后一个对应该系列应用最新的版本。LTS(Long Time Support)，长期支持的版本。  </p>
<p>另外还有一个应用Windows Terminal，是Windows提供的终端程序。之后也可以安装并用来操作Ubuntu，这会先不装。  </p>
<p>应用商店直接点击安装，就能自动完成。完成后就可以点击进入应用了，首次进入应用还要进行Ubuntu系统的安装。这个安装会生成1G多的内容，就是Ubuntu系统的整个文件系统的文件和目录。在这之前，可以考虑先把应用文件夹移动到Windows系统的其他目录中去。<em>这个问题不影响体验和使用，也可以先不管，或者之后再弄也没问题。</em>  </p>
<h4 id="yi-dong-ying-yong-mu-lu"><a class="toclink" href="#yi-dong-ying-yong-mu-lu">移动应用目录</a></h4>
<p>应用默认都安装在C盘，但是东西比较多，可以考虑将应用整体或者Ubuntu系统的部分目录移动到其它位置。这小节将把整个应用程序的目录移动到Windows的其他位置。至于只调整Ubuntu系统的部分目录（非系统目录），等进入系统后<strong>调整部分目录</strong>，后面有单独的一节。  </p>
<h5 id="ying-yong-an-zhuang-lu-jing"><a class="toclink" href="#ying-yong-an-zhuang-lu-jing">应用安装路径</a></h5>
<p>应用默认安装在如下的位置：  </p>
<div class="highlight"><pre><span></span><code>C:\用户\&lt;用户名&gt;\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
</code></pre></div>

<p>CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc 是应用安装的目录。<strong>移动这个文件夹</strong>。<br>
LocalState 应用安装完的时候是个空目录。首次进入Ubuntu系统Installing的时候会生成内容。<br>
rootfs 是Ubuntu系统的根目录。<br>
比如可以直接用windows的记事本打开Ubuntu的/etc/passwd文件，对应的WIndwos的路径如下：  </p>
<div class="highlight"><pre><span></span><code>C:\用户\&lt;用户名&gt;\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\etc\passwd
</code></pre></div>

<h5 id="windows-xi-tong-zhong-cao-zuo"><a class="toclink" href="#windows-xi-tong-zhong-cao-zuo">Windows系统中操作</a></h5>
<p>到LocalState目录为止，包括LocalState目录都是Windows系统创建的。可以把目录移到别处，在原来的位置留下一个Windows系统的软连接。最好是在应用安装后，Ubuntu系统初始化之前操作。这个时候LocalState文件夹是空的，初始化后会生成1G多的内容。<br>
我尝试了移动LocalState目录，然后创建了Windows系统的软连接。Ubuntu的初始化是成功的（这时应该还是Windows系统在操作），但是初始化完成后，就提示系统找不到指定的文件，失败了。  </p>
<p>于是再向上移动一个层级直接把应用的目录移掉留下软连接，移动之后可以把文件夹（目的文件夹）名字改掉，原来的太长了。<br>
在windwos系统中创建软连接的命令格式如下：</p>
<div class="highlight"><pre><span></span><code>mklink /D &quot;link_name&quot; &quot;src_dir&quot;
</code></pre></div>

<p>操作的时候，需要以管理员身份运行cmd：</p>
<div class="highlight"><pre><span></span><code>&gt; mklink /D C:\Users\Steed\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc D:\UbuntuonWindows
为 C:\Users\Steed\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc &lt;&lt;===&gt;&gt; D:\UbuntuonWindows 创建的符号链接
&gt; 
</code></pre></div>

<h4 id="chu-shi-hua-an-zhuang"><a class="toclink" href="#chu-shi-hua-an-zhuang">初始化安装</a></h4>
<p>之前完成了应用安装，第一次启动进入后还要再安装，会在LocalState这个空目录下生成整个Ubuntu的文件系统。界面会显示<code>Installing, this may take a few minutes...</code>，继续等待。<br>
之后根据提示输入用户名和密码，就可以进入系统并使用了。<br>
首次进入看到的是如下的效果：</p>
<div class="highlight"><pre><span></span><code>Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: steed
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user &quot;root&quot;), use &quot;sudo &lt;command&gt;&quot;.
See &quot;man sudo_root&quot; for details.

Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.4.0-18362-Microsoft x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Sep 24 14:12:32 CST 2020

  System load:    0.52      Users logged in:        0
  Usage of /home: unknown   IPv4 address for eth0:  192.168.3.90
  Memory usage:   58%       IPv4 address for eth3:  192.168.44.1
  Swap usage:     0%        IPv4 address for eth4:  192.168.163.1
  Processes:      7         IPv4 address for wifi0: 172.16.0.45

1 update can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


This message is shown once once a day. To disable it please create the
/home/steed/.hushlogin file.
steed@DESKTOP-Steed:~$ uname -a
Linux DESKTOP-Steed 4.4.0-18362-Microsoft #836-Microsoft Mon May 05 16:04:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
steed@DESKTOP-Steed:~$ lsb_release  -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal
steed@DESKTOP-Steed:~$ ls -al
total 8
drwxr-xr-x 1 steed steed 4096 Sep 24 14:12 .
drwxr-xr-x 1 root  root  4096 Sep 24 14:12 ..
-rw-r--r-- 1 steed steed  220 Sep 24 14:12 .bash_logout
-rw-r--r-- 1 steed steed 3771 Sep 24 14:12 .bashrc
drwxr-xr-x 1 steed steed 4096 Sep 24 14:12 .landscape
-rw-rw-rw- 1 steed steed    0 Sep 24 14:12 .motd_shown
-rw-r--r-- 1 steed steed  807 Sep 24 14:12 .profile
steed@DESKTOP-Steed:~$
</code></pre></div>

<h5 id="ti-shi-yong-hu-shi-yong-sudo"><a class="toclink" href="#ti-shi-yong-hu-shi-yong-sudo">提示用户使用sudo</a></h5>
<p>之后每次进入后还会有如下的提示：</p>
<div class="highlight"><pre><span></span><code>To run a <span class="nb">command</span> as administrator <span class="o">(</span>user <span class="s2">&quot;root&quot;</span><span class="o">)</span>, use <span class="s2">&quot;sudo &lt;command&gt;&quot;</span>.
See <span class="s2">&quot;man sudo_root&quot;</span> <span class="k">for</span> details.

steed@DESKTOP-Steed:~$
</code></pre></div>

<p>这是因为监测到用户从未用过sudo命令，提示用户可以使用sodu执行命令。  </p>
<p>随便用sudo执行个命令：</p>
<div class="highlight"><pre><span></span><code>steed@DESKTOP-Steed:~$ sudo date -R
<span class="o">[</span>sudo<span class="o">]</span> password <span class="k">for</span> steed:
Fri, <span class="m">25</span> Sep <span class="m">2020</span> <span class="m">13</span>:40:47 +0800
steed@DESKTOP-Steed:~$ ll .sudo_as_admin_successful
-rw-r--r-- <span class="m">1</span> steed steed <span class="m">0</span> Sep <span class="m">25</span> <span class="m">13</span>:40 .sudo_as_admin_successful
steed@DESKTOP-Steed:~$
</code></pre></div>

<p>之后，会生成一个.sudo_as_admin_successful的隐藏文件。有这个文件说明用户已经用过sudo并成功了，之后登录就不会再收到使用sudo的提示了。  </p>
<h5 id="mo-ren-shi-yong-root-deng-lu"><a class="toclink" href="#mo-ren-shi-yong-root-deng-lu">默认使用root登录</a></h5>
<p>可以打开Windows的cmd执行命令。<br>
执行命令<code>ubuntu</code>，应用的启动命令，就是在cmd里进入Ubuntu系统。<br>
执行命令<code>ubuntu help</code>，可以查看帮助信息。<br>
执行命令<code>ubuntu config --default-user root</code>，就完成了设置。再进入Ubuntu系统时，默认就是root用户登录了。  </p>
<p>我先不考虑默认使用root用户。  </p>
<h5 id="qie-huan-dao-root-yong-hu"><a class="toclink" href="#qie-huan-dao-root-yong-hu">切换到root用户</a></h5>
<p>使用su命令切换用户:</p>
<div class="highlight"><pre><span></span><code>$ su -
Password:
su: Authentication failure
$
</code></pre></div>

<p>这里需要输入root账号的密码，然而root账号是没有设置过密码的，所以行不通。<br>
<em>切换的su命令一定要加上-，加和不加都能切换账号，但是有差别。加上-相当于重新登录该账号，账号的环境变量等设置会生效，并且会自动切换到账号家目录。</em>  </p>
<p>如果要设置或修改root的密码：</p>
<div class="highlight"><pre><span></span><code>$ sudo passwd root
</code></pre></div>

<p>不过没必要。  </p>
<p>直接用sudo执行su命令就不需要目标账号的密码了:</p>
<div class="highlight"><pre><span></span><code>$ sudo su -
</code></pre></div>

<p>不过登录后第一次使用sudo需要输入当前账号的密码。这个行为也可以通过命令<code>visudo</code>修改配置来免密码，不过我选择暂时保留这个策略。  </p>
<h4 id="zhong-zhuang-ubuntu"><a class="toclink" href="#zhong-zhuang-ubuntu">重装Ubuntu</a></h4>
<p>不必卸载应用再重装。可以参考上面首次进入Ubuntu系统的初始化操作。<br>
只要将LocalState目录中的内容清空。这个目录在首次进入Ubuntu系统之前就是空目录，而整个Ubuntu文件系统都在这个目录下。清空目录后，再次打开应用，又会像第一次那样开始安装，生成新的Ubuntu文件系统。  </p>
<p>另外，LocalState目录下会有一个fsserver文件。这个文件只在Ubuntu启动时才会生成。当应用退出后，这个文件也会自动删除。通过这个文件可以判断Ubuntu是否正则运行。<br>
应用退出后，这个文件不是马上消失的。用户退出应用，应用还需要一些时间释放资源，之后才真正的在Windwos系统层面退出应用，删除该文件。  </p>
<h4 id="tiao-zheng-bu-fen-mu-lu"><a class="toclink" href="#tiao-zheng-bu-fen-mu-lu">调整部分目录</a></h4>
<p><strong>Ubuntu系统中操作</strong>，LocalState目录下的内容是Ubuntu系统创建的。rootfs是的Ubuntu的根目录，这些都要在Ubuntu系统中调整。
Windows系统的所有盘符都挂载在/mnt/目录下，比如/mnt/d下就是d盘的内容。所以可以把非系统文件夹移动到任意的位置。在Ubuntu系统中执行命令，移动目录或文件，并创建软连接即可。  </p>
<p>移动空文件夹：</p>
<div class="highlight"><pre><span></span><code>$ sudo su -
$ rmdir /opt
$ ln -s /mnt/p/WSL/Ubuntu/opt /opt
$ mkdir /mnt/p/WSL/Ubuntu/opt
</code></pre></div>

<p>移动有内容的文件夹：</p>
<div class="highlight"><pre><span></span><code>$ sudo su -
$ mkdir /mnt/p/WSL/Ubuntu/usr
$ mv /usr/local /mnt/p/WSL/Ubuntu/usr/local
$ ln -s /mnt/p/WSL/Ubuntu/usr/local /usr/local
$ 
</code></pre></div>

<p>移动家目录，不建议实施：</p>
<div class="highlight"><pre><span></span><code>$ mv /home /mnt/p/WSL/Ubuntu/home
$ ln -s /mnt/p/WSL/Ubuntu/home /home
</code></pre></div>

<p>在之后使用 <a href="#windows-terminal">Windows Terminal</a> 的时候，这步会影响体验，无法<strong>默认进入家目录</strong>。家目录就不要用软连接了，在使用Terminal的时候会说明如何设置默认进入子系统的家目录。  </p>
<h4 id="zai-gen-mu-lu-zhong-cha-zhao-wen-jian-find"><a class="toclink" href="#zai-gen-mu-lu-zhong-cha-zhao-wen-jian-find">在根目录中查找文件(find)</a></h4>
<p>在WSL中查找文件有个特殊情况要处理。当需要从根目录开始查找时，会遍历所有的目录，包括/mnt文件夹。<br>
一方面，要把查找范围控制在Ubuntu系统内，不要跑到Windows里。<br>
另一方面，没有Windows系统的文件权限，屏幕上全是报错信息。  </p>
<h5 id="pai-chu-te-ding-mu-lu"><a class="toclink" href="#pai-chu-te-ding-mu-lu">排除特定目录</a></h5>
<p>使用find命令时，排除目录的命令格式不太好理解，示例如下：</p>
<div class="highlight"><pre><span></span><code>$ sudo find / -path /mnt -prune -o -name command-not-found -type f
/mnt
/usr/lib/command-not-found
$ 
</code></pre></div>

<p>查找根目录并排除/mnt目录的命令是这段<code>find / -path /mnt -prune -o</code>。另外sudo也要加上，有些目录没权限进入。  </p>
<h5 id="zhui-jia-pai-chu-mu-lu-xia-de-zi-mu-lu"><a class="toclink" href="#zhui-jia-pai-chu-mu-lu-xia-de-zi-mu-lu">追加排除目录下的子目录</a></h5>
<p>之前还把/opt和/usr/local做了软连接，指向了/mnt下的路径中了。现在要查找这两个目录，实际查找的是指向的/mnt下的目录。但是目标目录又被/mnt整个排除了。所以用上面的命令是找不到用软连接指到/mnt路径下的文件的。<br>
find命令可以写多个搜索路径，直接列在find后面紧挨着：</p>
<div class="highlight"><pre><span></span><code>$ sudo find / /mnt/p/WSL/Ubuntu/ -path /mnt -prune -o
</code></pre></div>

<h5 id="bu-da-yin-bei-pai-chu-de-mu-lu"><a class="toclink" href="#bu-da-yin-bei-pai-chu-de-mu-lu">不打印被排除的目录</a></h5>
<p>使用的时候，还有点小瑕疵，会把排除的目录打印出来：</p>
<div class="highlight"><pre><span></span><code>$ sudo find / /mnt/p/WSL/Ubuntu/ -path /mnt -prune -o -type d -name sbin
/mnt
/usr/sbin
/mnt/p/WSL/Ubuntu/usr/local/sbin
$
</code></pre></div>

<p>这里不需要用grep命令再过滤，只在在最后加上-print就可以了：</p>
<div class="highlight"><pre><span></span><code>$ sudo find / /mnt/p/WSL/Ubuntu/ -path /mnt -prune -o -type d -name sbin -print
/usr/sbin
/mnt/p/WSL/Ubuntu/usr/local/sbin
$
</code></pre></div>

<p>这里-print一定要加在最后。<br>
<em>find命令后的这些参数，并不是向其他命令那样是选项，而是处理的动作。有前后顺序的，默认是AND逻辑，这里的-o表示OR逻辑。另外这些逻辑也可以用小括号改变优先级，参考man文档括号要用\(和\)转义。并且这里的逻辑运算符合短路原则</em>  </p>
<p>平时使用的时候一般都不用加-print，因为默认都会在最后最后加上，除非有-prune或-quit。这里用了-prune所以需要自己手动加上。下面是man文档中的片段：  </p>
<blockquote>
<p>The -print action is performed on all files for which the whole expression is true, unless it contains an  action  other than -prune or -quit.  </p>
</blockquote>
<h5 id="tian-jia-bie-ming"><a class="toclink" href="#tian-jia-bie-ming">添加别名</a></h5>
<p>用findr作为别名，方便调用：</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s2">&quot;alias findr=&#39;sudo find / /mnt/p/WSL/Ubuntu/ -path /mnt -prune -o&#39;&quot;</span> &gt;&gt; ~/.bash_aliases
<span class="nb">source</span> .bash_aliases
</code></pre></div>

<p>命令最后的-print没有好办法，只能需要的时候手动加上。交互的时候忘记加也没什么问题。  </p>
<p>纠结下上面的问题，还是有解决办法的，不过不推荐，我没有采用。定义函数并设置为别名：</p>
<div class="highlight"><pre><span></span><code>$ <span class="nb">alias</span> <span class="nv">findr</span><span class="o">=</span><span class="s1">&#39;new_find() { sudo find / /mnt/p/WSL/Ubuntu/ -path /mnt -prune -o &quot;$@&quot; -print;};new_find&#39;</span>
</code></pre></div>

<p><em>这里定义了一个函数，使用后命令行用Tab这个新定义的函数名也会出现。确保名称没有冲突。</em>  </p>
<h3 id="windows-terminal"><a class="toclink" href="#windows-terminal">Windows Terminal</a></h3>
<p>差不多该使用工具来操作了。<br>
Windows Terminal 是一款新式、快速、高效、强大的终端应用程序。适用于命令行工具和命令提示符，PowerShell和WSL等Shell用户。<br>
应用商店找到“Windows Terminal”，然后安装。  </p>
<p>安装完成后，即可进入。默认进入的是PowerShell，另外还有命令提示符，Ubuntu和Azure。<br>
如果遇到需要以管理员方式运行，右键，以管理员身份运行启动Terminal，应该就可以了。<br>
另外，点击设置，可以打开配置文件，相关的配置都在这里了。这里有<a href="https://aka.ms/terminal-documentation">配置文档</a>  </p>
<h4 id="xiu-gai-mo-ren-cheng-xu"><a class="toclink" href="#xiu-gai-mo-ren-cheng-xu">修改默认程序</a></h4>
<p>默认是打开PowerShell，可以改成别的：</p>
<div class="highlight"><pre><span></span><code>{
    //&quot;defaultProfile&quot;: &quot;{61c54bbd-c2c6-5271-96e7-009a87ff44bf}&quot;,
    &quot;defaultProfile&quot;: &quot;{0caa0dad-35be-5f56-a8ff-afceeeaa6101}&quot;,
}
</code></pre></div>

<p>在配置文件下面找到应用的guid，替换掉PowerShell的guid就好了。  </p>
<h4 id="mo-ren-jin-ru-jia-mu-lu"><a class="toclink" href="#mo-ren-jin-ru-jia-mu-lu">默认进入家目录</a></h4>
<p>Terminal启动应用是，都会默认进入用户目录。但是这里认的是Windows系统的用户目录，也只认Windows系统的路径。<br>
进入WSL时，我们希望直接进入WSL系统用户的家目录，这个就需要手动设置<code>startingDirectory</code>，并且用<code>\\wsl$\</code>前缀来寻址 WSL 分发的文件系统。<br>
参考的json配置如下：</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;guid&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;{2c4de342-38b7-51cf-b940-2309a097f518}&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;hidden&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Ubuntu&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;source&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Windows.Terminal.Wsl&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;startingDirectory&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;//wsl$/Ubuntu/home/steed&quot;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</code></pre></div>

<p>另外，这里认的是Windows系统的文件路径，所以这部分路径不能在Ubuntu里做软连接。  </p>
<h4 id="shi-yong-ssh"><a class="toclink" href="#shi-yong-ssh">使用SSH</a></h4>
<p>还可以使用的内置的 SSH 客户端。由于还要自己输密码，这个只能凑活用。<br>
添加如下的配置:</p>
<div class="highlight"><pre><span></span><code><span class="w">            </span><span class="p">{</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;VM Playhost&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;icon&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;D:/Users/Steed/Pictures/ico/VMware.ico&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w">                </span><span class="nt">&quot;commandline&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ssh root@192.168.163.23&quot;</span><span class="w"></span>
<span class="w">            </span><span class="p">}</span><span class="w"></span>
</code></pre></div>

<p>guid不是必须的，主要是name和commandline，另外这里还指定了图标icon。<br>
这个只是简单的命令调用。ssh连接后，密码还得自己输。<br>
调用ssh命令自动输密码的问题，用sshpass也可以解决，但是Windows系统里没有现成的，目前没有好的解决办法。  </p>
<p>顺便附上Linux里sshpass自动输入密码的用法：</p>
<div class="highlight"><pre><span></span><code>$ sshpass -p <span class="s1">&#39;PASSWORD&#39;</span> ssh root@192.168.163.23
$ sshpass -f password.txt ssh root@192.168.163.23
</code></pre></div>

<p>用的时候，推荐把密码写到文件中，用-f参数，就如第二行例子中那样。避免明文输入密码，也避免了密码出现在history里。<br>
<em>至于Windows系统，没办法，用的时候就每次输密码。</em>  </p>
<h3 id="fang-wen-wsl-wen-jian-jia"><a class="toclink" href="#fang-wen-wsl-wen-jian-jia">访问wsl文件夹</a></h3>
<p>可以通过Windows的文件资源管理器访问wsl文件夹。<br>
只要使用<code>\\wsl$</code>即可。  </p>
      </div>
      <div class="back-to-top">
        <a href="/">HOME</a>
        <a href="#top">TOP</a>
      </div>
    </article>
  </div>
<!-- end article -->
<!-- 页面往下滚动一段之后才会显示TOC -->
<script>
  window.onscroll = function() {
    var tocbox = document.getElementsByClassName('toc')[0];
    var osTop = document.documentElement.scrollTop || document.body.scrollTop;
    var osWidth = document.documentElement.scrollWidth || document.body.scrollWidth;
    // console.log(osTop)
    if (osTop>300 && osWidth>865) {
      tocbox.style.display = "block"
    }
    if (osTop<300 || osWidth<865) {
      tocbox.style.display = "none"
    }
  }
</script>
                <footer>
                    <div class="icons">
                    </div>
                    <span id="busuanzi_container_page_pv" style="padding: 10px">本文阅读量<span id="busuanzi_value_page_pv"></span>次</span>
                    <span id="busuanzi_container_site_pv" style="padding: 10px">本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
                    <span id="busuanzi_container_site_uv" style="padding: 10px">本站总访客数<span id="busuanzi_value_site_uv"></span>人</span>
                    <p>© <script>document.write(moment().format('YYYY'));</script> 749B</p>
                </footer>
        </div>
</body>
</html>